import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import dts from 'vite-plugin-dts'
import path from 'node:path'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueDevTools(),
    dts({
      outDir: 'dist', // 打包文件名
      insertTypesEntry: true,
      include: ['src'],
    }),
  ],

  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
  build: {
    sourcemap: true,
    // 避免dist被清空
    emptyOutDir: false,
    // 如果不想被别人直接看到源码就用这个lib方式
    lib: {
      // 入口文件
      entry: path.resolve(__dirname, 'src/index.ts'),
      // // 暴露的全局变量的名字，这个名字可以自定义，最好是你的包的名字
      name: 'example',
      // 输出的文件名，这里和上面的 name 最好保持一致

      fileName: (format) => `example.${format}.js`,
    },
    rollupOptions: {
      external: ['vue'], // 把不想打包进你的包的包排除掉
      output: {
        format: 'es',
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: 'Vue',
        },
        // 使用命名模式导出，也可以不设置即使用默认模式。二者的区别就是使用组件时是否要带{}: import { example } from "example"; or import example from "example"
        exports: 'named',
      },
    },
  },
})
